package aceim.protocol.snuk182.vkontakte.internal; import aceim.api.utils.Logger; import aceim.api.utils.Logger.LoggerLevel; import aceim.protocol.snuk182.vkontakte.R; import aceim.protocol.snuk182.vkontakte.VkConstants; import aceim.protocol.snuk182.vkontakte.VkProtocol; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.view.Window; import android.webkit.CookieManager; import android.webkit.CookieSyncManager; import android.webkit.WebView; import android.webkit.WebViewClient; public class LoginActivity extends Activity { /*private static final int MASK_EXTENDED_MESSAGE_METHODS = 4096; private static final int MASK_BUDDIES = 1024; private static final int MASK_BUDDY_STATUSES = 2; private static final String VK_API_VERSION = "5.5";*/ private String authServiceUrl = VkConstants.OAUTH_SERVER; private String uid = ""; private String password = ""; private boolean autoSubmitDialog = false; @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.login); login(); } @Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); } @SuppressLint("SetJavaScriptEnabled") private void login() { uid = getIntent().getExtras().getString(VkConstants.KEY_PROTOCOL_ID); password = getIntent().getExtras().getString(VkConstants.KEY_PASSWORD); autoSubmitDialog = getIntent().getExtras().getBoolean(VkConstants.KEY_AUTO_SUBMIT_AUTH_DIALOG, false); WebView webView = (WebView) findViewById(R.id.loginWebView); webView.getSettings().setJavaScriptEnabled(true); webView.clearCache(true); if (Build.VERSION.SDK_INT < 19) { webView.getSettings().setSavePassword(false); } CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); webView.setWebViewClient(new WebViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); setProgressBarIndeterminateVisibility(true); parseResult(url); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); setProgressBarIndeterminateVisibility(false); if (url.startsWith(VkConstants.OAUTH_SERVER)) { view.loadUrl("javascript:" + "document.getElementsByName('email')[0].value = '" + uid + "';" + "document.getElementsByName('pass')[0].value = '" + password + "';"); if (autoSubmitDialog) { view.loadUrl("javascript:document.addEventListener('DOMContentLoaded', function(){" + "document.getElementById('install_allow').click();" + "});"); } } } }); String url = "?client_id=" + VkApiConstants.API_ID + "&scope=friends,status,messages,photos,audio,video,docs,notifications,offline" + "&redirect_uri=" + VkConstants.OAUTH_REDIRECT_URL + "&display=popup" + "&response_type=token"; if (authServiceUrl == null) { authServiceUrl = VkConstants.OAUTH_SERVER; } webView.loadUrl(authServiceUrl + url); } private void parseResult(String url) { if (url == null || !url.startsWith(VkConstants.OAUTH_REDIRECT_URL) || url.contains("error=")) { Logger.log("Webview result: " + url, LoggerLevel.VERBOSE); return; } Uri parsed = Uri.parse(url.replace("#", "?")); String code = parsed.getQueryParameter("code"); String error = parsed.getQueryParameter("error"); String errorDescription = parsed.getQueryParameter("error_description"); String accessToken = parsed.getQueryParameter("access_token"); String expirationTime = parsed.getQueryParameter("expires_in"); String internalUserId = parsed.getQueryParameter("user_id"); Bundle results = new Bundle(); results.putString(VkConstants.KEY_PROTOCOL_ID, uid); if (code != null) { results.putString(VkConstants.KEY_CODE, code); } if (error != null) { results.putString(VkConstants.EXTRA_ERROR, error); } if (errorDescription != null) { results.putString(VkConstants.EXTRA_ERROR_DESCRIPTION, errorDescription); } if (accessToken != null) { results.putString(VkConstants.KEY_TOKEN, accessToken); } if (expirationTime != null) { long expTimeSeconds = Long.parseLong(expirationTime); results.putLong(VkConstants.KEY_EXP_TIME_SECONDS, expTimeSeconds * 1000 + System.currentTimeMillis()); results.putBoolean(VkConstants.KEY_UNEXPIRABLE_TOKEN, expTimeSeconds == 0); } if (internalUserId != null) { results.putLong(VkConstants.KEY_USER_ID, Long.parseLong(internalUserId)); } Intent serviceIntent = new Intent(getApplicationContext(), VkProtocol.class); serviceIntent.putExtras(results); startService(serviceIntent); finish(); } }